#include "Campo.h"

Campo::Campo(){
	/*Inicializa las parcelas en NULL*/
	for(int i=0;i<ANCHO;i++)
		for(int j=0;j<LARGO;j++)	{	
			parcelas[i][j].plantarSemilla(NULL);
			campoTipos[i][j]=0;
			matrizPonderacion[i][j]=0;
		}
	/*Carga la info de los cultivos*/						
	Maiz::cargarFactores(); 
        Soja::cargarFactores(); 
	Girasol::cargarFactores();				
}

Campo::~Campo(){
	
	Maiz::borrarVectorFactores();					
	Soja::borrarVectorFactores();					
	Girasol::borrarVectorFactores();					
}

int  Campo::cargarCampo(std::string nombreArchivo){
	      
	     archivo.open(nombreArchivo.c_str());   
  		 if( !archivo.good() )
			return 0;/*Error al abrir el archivo*/
		 int tipo=0;
		 for(int i=0;i<ANCHO;i++){
		 	for(int j=0;j<LARGO;j++){
				archivo>>tipo;
				
				campoTipos[i][j]=tipo; /*Guarda los tipos*/
	
				/*Selecciona el tipo de cultivo a plantar*/
				if(tipo==2)
					parcelas[i][j].plantarSemilla(new Maiz());
				else if(tipo==3)
					parcelas[i][j].plantarSemilla(new Girasol());
				else if(tipo==4)
					parcelas[i][j].plantarSemilla(new Soja());
				else{
					parcelas[i][j].plantarSemilla(NULL);
					campoTipos[i][j]=0; /*Guarda los tipos*/
						
				}
				}
		 }		
		 archivo.close();		
		 return 1;
}

void Campo:: copiarCampo(int m[ANCHO][LARGO]){

	   for(int i=0;i<ANCHO;i++)
		 for(int j=0;j<LARGO;j++)
			 m[i][j]=campoTipos[i][j];
}

void Campo::actualizar(std::string factor,std::vector<tAtribVariables> vector,int dias){
				 
	   std::vector<tAtribVariables>::iterator it;
	   it=vector.begin();
	   for(int i=0;i<ANCHO;i++)
	 	for(int j=0;j<LARGO;j++){
			if(it!=vector.end()){
				parcelas[i][j].calcularCrecimiento(factor,(int)(*it).getValor(), dias);
		        it++;
			}	
			else 
           		parcelas[i][j].calcularCrecimiento(factor,0, dias);		
		}	
}

void Campo::devolverValoresCrecimiento( int m[ANCHO][LARGO]){
		
	 for(int i=0;i<ANCHO;i++)
		for(int j=0;j<LARGO;j++){
		         m[i][j]=parcelas[i][j].devolverValoresCrecimiento();
		}
}

void  Campo::devolverValoresDegradacion( int d[ANCHO][LARGO]){
	
	for(int i=0;i<ANCHO;i++)
		for(int j=0;j<LARGO;j++){
		        d[i][j]=parcelas[i][j].devolverValoresDegradacion();
		}
}

void Campo:: actualizarMatrizPonderacion(std::vector<tAtribVariables> vector){
	
       for(int i=0;i<ANCHO;i++)
		for(int j=0;j<LARGO;j++){
			matrizPonderacion[i][j]++;
		}		
	  
}
void Campo:: ponderar(){
	
		 for(int i=0;i<ANCHO;i++)
		 	for(int j=0;j<LARGO;j++){
				parcelas[i][j].ponderar( matrizPonderacion[i][j]);
								
		        }	
}	 
	
void Campo::resetMatrizPonderacion(){
	
	 for(int i=0;i<ANCHO;i++)
		for(int j=0;j<LARGO;j++){
			matrizPonderacion[i][j]=0;
				}		
}

void Campo::reiniciar(){
 	
	for(int i=0;i<ANCHO;i++)
	 	for(int j=0;j<LARGO;j++){
			parcelas[i][j].reiniciar();
		}		
}
